namespace HumanElement.Xna
{
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="TContext">The type of the context.</typeparam>
    /// <typeparam name="TService">The type of the service.</typeparam>
    /// <typeparam name="TEntity">The type of the entity.</typeparam>
    public interface IProcess<TContext, TService, TEntity>
        where TContext : IContext<TService, TEntity>
        where TEntity : IEntity
        where TService : IGameService<TEntity>
    {
        /// <summary>
        /// Gets the entity.
        /// </summary>
        /// <value>The entity.</value>
        TEntity Entity { get; }

        /// <summary>
        /// Gets the service.
        /// </summary>
        /// <value>The service.</value>
        TService Service { get; }

        /// <summary>
        /// Executes the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns></returns>
        bool Execute(TContext context);
    }
}